Conventionally, a single computer system operated a single operating system. For example, each computer user may be assigned a client computing device that runs an operating system and various application programs as desired. A server computing device may also run in a similar fashion with a single operating system and various applications.
In an effort to expand the number of operating systems and application programs that can run on a computer system, a virtualization technology has developed where a given computer having one type of CPU, called a host, includes an emulator program that allows the host computer to emulate the instructions of an unrelated type of CPU, called a guest. Thus, the host computer executes an application that causes one or more host instructions to be called in response to a given guest instruction. Thus, the host computer can both run software designed for its own hardware architecture and software written for computers having an unrelated hardware architecture. For example, a computer system manufactured by Apple Computer may run operating systems and programs written for PC-based computer systems. It may also be possible to use an emulator program to operate multiple incompatible operating systems concurrently on a single CPU. In this arrangement, although each operating system is incompatible with the other, an emulator program can host one of the two operating systems, allowing the otherwise incompatible operating systems to run concurrently on the same computer system.
When a guest computer system is emulated on a host computer system, the guest computer system is commonly said to be a “virtual machine” since the guest computer system only exists in the host computer system as a pure software representation of the operation of one specific hardware architecture. The terms emulator, virtual machine, and processor emulation are sometimes used interchangeably to denote the ability to mimic or emulate the hardware architecture of an entire computer system. For example, some commercially available software emulates an entire computer that includes an Intel 80X86 Pentium processor and various motherboard components and cards. The operation of these components is emulated in the virtual machine that is being run on the host machine. An emulator program executing on the operating system software and hardware architecture of the host computer, such as a computer system having a PowerPC processor, mimics the operation of the entire guest computer system.
The emulator program acts as the interchange between the hardware architecture of the host machine and the instructions transmitted by the software running within the emulated environment. This emulator program may be a host operating system (HOS), which is an operating system running directly on the physical computer hardware. Alternately, the emulated environment might also be a hypervisor or virtual machine monitor which is a software layer that runs directly above the hardware and which virtualizes all the resources of the machine by exposing interfaces that are the same as the hardware the hypervisor is virtualizing (which enables the hypervisor to go unnoticed by operating system layers running above it). A host operating system and a hypervisor may run side-by-side on the same physical hardware.
One of the many advantages of a virtual machine over a physical machine is the ability to quickly and cheaply create multiple instances of the same virtual machine. Multiple virtual machines can exist simultaneously in a single host machine (host computer system) environment, and resources of the host machine can be divided amongst the various virtual machines. This flexible resource allocation becomes even more useful when combined with the ability to move, or “migrate,” virtual machines from one host machine to another.
Being able to migrate a virtual machine quickly and easily from one host machine to another is useful, for example, for “load balancing” systems, decommissioning machines, performing hardware or software upgrades, or handling disaster recovery. More specifically, if a virtual machine requires more processing power than is available on one host machine, it can be moved to another host machine that has extra capacity. If the host machine requires hardware maintenance or a software upgrade, the virtual machine may be migrated from one physical machine to another temporarily, which thereby allows the first physical machine to be taken down and upgraded. In the case of disaster recovery, if, for example, an impending flood or storm is predicted, all virtual machines of a datacenter can be migrated to another datacenter that is out of harm's way and then migrated back when the threat passes. In all cases, this allows, for example, critical business applications to remain up and running without interruption and without the user even being aware of the interruption.
Performing a virtual machine migration process involves moving all the states of the virtual machine. These states include three areas: (1) the virtual machine virtualized device state, which is the internal states of all virtualized controllers and motherboard virtualized devices, such as the virtualized interrupt controller, virtualized SCSI controller, and virtualized video controller; (2) the virtual machine memory state; and (3) the virtual machine disk state, which is the persistent storage.
In server virtualization technologies, the virtual machine's state information and data does not reside in the same storage object. This can present a number of problems, especially when a large number of virtual machines need to be migrated. For example, the administrator has to worry about migrating each and every virtual machine and making sure that the storage it has been accessing is also accessible at the destination host machine. Also, migrating large numbers of virtual machines takes a long time and is an error prone process due the multiple steps that are required for each virtual machine.
It would be desirable to provide a way to migrate one or more virtual machines, preferably, large numbers of virtual machines quickly and efficiently.